// 引入user模型
const { User } = require('../model/user')
const { Article } = require('../model/article')
// 引入bcrypt
const bcrypt = require('bcrypt')
// import
const jwt = require('jsonwebtoken')
const config = require('../config')

exports.register = async (req, res, next) => {
  try {
    const validValue = req.validValue
    // 查询邮箱是否已经存在
    let { email, password } = validValue
    let user = await User.findOne({
      email
    })
    if (user) {
      return res.status(200).json({
        code: 400,
        msg: '邮箱已经被注册,请使用其他邮箱注册'
      })
    } else {
      const salt = await bcrypt.genSalt(10)
      password = await bcrypt.hash(validValue.password, salt)
      const addUser = new User({
        email,
        password,
        name: '默认名'
      })
      await addUser.save()
      res.status(200).json({
        code: 200,
        msg: '注册成功',
        data: {
          email
        }
      })
    }
  } catch (err) {
    next(err)
  }
}

// 获取用户接口信息
exports.getInfo = async (req, res, next) => {
  let userData = req.userData
  try {
    const data = await User.findById(userData._id)
    console.log(userData, data)
    // 响应发送
    res.status(200).json({
      code: 200,
      data,
      message: '成功'
    })
  } catch (err) {
    next(err)
  }
}

// 编辑用户
exports.updateInfo = async (req, res, next) => {
  try {
    // 检测是否存在_id参数
    const body = req.body
    if (!body._id) {
      return res.status(400).json({
        code: 400,
        msg: '缺少参数_id'
      })
    }
    // 查找并更新用户
    console.log('======', body._id)
    // 处理password
    const salt = await bcrypt.genSalt(10)
    body.password = await bcrypt.hash(body.password, salt)
    const data = await User.findByIdAndUpdate(body._id, body)
    if (!data) {
      return res.status(400).json({
        code: 401,
        msg: '编辑用户信息失败'
      })
    }
    // 成功响应
    delete body.password
    return res.status(200).json({
      code: 200,
      msg: '编辑用户成功',
      data: body
    })
  } catch (err) {
    next(err)
  }
}

// 删除
exports.deleteUser = async (req, res, next) => {
  try {
    // 检测是否存在id
    let id = req.body._id
    if (!id) {
      return res.status(400).json({
        code: 400,
        msg: '请传入id'
      })
    }
    // 根据id删除用户数据
    const data = await User.deleteOne({
      _id: id
    })
    // 删除用户发布过的文章
    await Article.deleteMany({ author: id })
    // Article.deleteMany
    if (!data) {
      return res.status(400).json({
        code: 400,
        msg: '删除用户失败'
      })
    }
    return res.status(200).json({
      code: 200,
      msg: '删除成功'
    })
  } catch (err) {
    next(err)
  }
}
